﻿<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="calc.css" />
<title>Калькулятор PHP</title>
</head>
<?php
error_reporting (E_ALL & ~E_NOTICE);

function getOperators(){
	$operators = array();
	$dir = opendir("."); # Open the path
	while ($file = readdir($dir)){ 
		if (!eregi("\.php", $file)) continue; # Look at only files with a .php extension   
		$fileContent = file_get_contents($file); //считываем как текст код класса с операцией

		preg_match_all("|class(\s)+(\w+)|", $fileContent, $out, PREG_PATTERN_ORDER);
		//проверяем что это действительно класс

		$className = $out[2][0]; //берем имя класса из результата регулярного поиска
		
		if ($className == "") continue;
		
		include_once  dirname( __FILE__ ) . '\\' .$className .'.php';// там будет $className
		//считаем файлы, с помощью регулярок и phpDoc заполним селект
		//для выбора операций. далее будет типа $selectedValue

		$reflectedObject = new ReflectionClass($className);  //ReflectionObject != ReflectionClass
		// $reflectedObject = new ReflectionClass("Plus");  //из строки получить класс Plus

		$rcIAction = new ReflectionClass("IAction"); //чтобы иметь возможность проверить
		$rc=  $reflectedObject ->implementsInterface($rcIAction);//реализует ли считанный нами класс интерфейс IAction
		
		if(!$rc) continue;
		
		$operator = new $className;
		
		// сохраним сущность оператора в массив
		// где ключом будет имя оператора
		// например для Plus.php 
		// ключь равен "Plus" а значение new Plus
		$operators[$className] = $operator;
	}
	
	return $operators;
}

$operators = getOperators();

$num1 = $_POST['num1'];
$num2 = $_POST['num2'];
$actionIndex = $_POST['actions'];

function solve(){
	$do = $_GET['do'];

	$num1 = $_POST['num1'];
	$num2 = $_POST['num2'];
	$actionIndex = $_POST['actions'];
	if($do != "calc")
	{
		return '';
	}
	$result = '';

	// проверка: число или нет
	if(!preg_match("[0-9]", $num1))
	{
		$result = ("$num1 ne chislo");
	}
	if(!preg_match("[0-9]", $num2))
	{
		$result = ("$num2 ne chislo");
	}
				
	//  выбор математический операций
	// и последующие математические вычисления
	
	$inputs = array($num1, $num2);
	$operators = getOperators();
	$operator = $operators[$actionIndex];// если бы $actionIndex был "Plus" $operators["Plus"];
	if($operator != null){
		$result =  $operator->Evaluate($inputs);
		return $result;
	}

	$result =  ("Я таких значений не знаю");
	return $result;
}
?>
<body>
<form action="?do=calc"  method="POST">
<div id="head">
    <h1>Калькулятор</h1>
    <input type="text"  name="num1" id="num1"  value="<?php echo $num1; ?>"/>
	<br />

	<select name="actions" id="actions">
        <option value="choose" >Выберите действи</option>
		<?php
		// для каждого ключа и значения в массиве $operators
		// например для Plus.php 
		// $key равен "Plus" а $value new Plus
		foreach ($operators as $key => $value) {
			$action = $value->GetActionString();
			if($actionIndex == $key){
				echo '<option value="' .$key .'" selected="yes"> ' .$action .' </option>';
			}
			else{
				echo '<option value="' .$key .'"> ' .$action .' </option>';
			}
		}
		?>		
	</select>
	</br>
	<input name="num2" id="num2" value="<?php echo $num2; ?>"/><br/>
	<button id="cmd" type="submit">Вычислить</button><br/>
	<input id="result" readonly value="<?php echo solve();?>"/>
<div id="footer">&copy; Мария Донгак</div>
</div>
</form>
 </body>
</html>